package com.agile.springboot.service.impl;

import com.agile.springboot.service.QuestionnaireService;
import com.agile.springboot.dao.QuestionnaireMapper;
import com.agile.springboot.entity.Questionnaire;
import com.agile.springboot.utils.DateUtil;
import com.agile.springboot.utils.UUIDUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class QuestionnaireServiceImpl implements QuestionnaireService {

    @Resource
    QuestionnaireMapper questionnaireMapper;

    /**
     * 新增问卷
     * @param questionnaire 问卷实体
     * @return 返回值为1，则说明新增问卷成功
     */
    @Override
    public int addQuestionnaire(Questionnaire questionnaire) {
        questionnaire.setIs_deleted(0);
        questionnaire.setId(UUIDUtil.getOneUUID());
        questionnaire.setCreation_date(DateUtil.getCurrentDate());
        questionnaire.setLast_update_date(DateUtil.getCurrentDate());
        return questionnaireMapper.insert(questionnaire);
    }

    /**
     * 逻辑删除问卷
     * @param questionnaire_id 问卷id
     * @return 返回值为1，则说明逻辑删除问卷成功
     */
    @Override
    public int deleteQuestionnaire(String questionnaire_id) {
        return questionnaireMapper.deleteById(questionnaire_id);
    }

    /**
     * 物理删除问卷
     * @param questionnaire_id 问卷id
     * @return 返回值为1，则说明物理删除问卷成功
     */
    @Override
    public int pscDeleteQuestionnaire(String questionnaire_id) {
        return questionnaireMapper.pscDeleteById(questionnaire_id);
    }

    /**
     * 修改问卷信息
     * @param questionnaire 问卷实体
     * @return 返回值为1，则说明修改问卷信息成功
     */
    @Override
    public int updateQuestionnaire(Questionnaire questionnaire) {
        return questionnaireMapper.updateById(questionnaire);
    }

    /**
     * 模糊搜索问卷
     * @param questionnaire_title 问卷名称
     * @return List<Questionnaire> 问卷列表
     */
    @Override
    public List<Questionnaire> fuzzySearchQuestionnaireByTitle(String questionnaire_title) {
        QueryWrapper<Questionnaire> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(questionnaire_title!=null,"questionnaire_title", questionnaire_title);
        return questionnaireMapper.selectList(queryWrapper);
    }

    /**
     * 精准搜索问卷——根据问卷名称
     * @param questionnaire_title 问卷名称
     * @return Questionnaire实体
     */
    @Override
    public Questionnaire exactSearchQuestionnaireByTitle(String questionnaire_title) {
        QueryWrapper<Questionnaire> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("questionnaire_title",questionnaire_title);
        return questionnaireMapper.selectOne(queryWrapper);
    }

    /**
     * 精准搜索问卷——根据问卷id
     * @param id 问卷id
     * @return Questionnaire实体
     */
    @Override
    public Questionnaire searchQuestionnaireById(String id) {
        QueryWrapper<Questionnaire> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",id);
        return questionnaireMapper.selectOne(queryWrapper);
    }

    /**
     * 查询当前用户创建的所有问卷——根据当前用户id
     * @param user_id 用户id
     * @return List<Questionnaire> 该用户创建的所有问卷
     */
    @Override
    public List<Questionnaire> queryQuestionnairesCreatedByUser(String user_id){
        QueryWrapper<Questionnaire> queryWrapper = new QueryWrapper<>();
        Map<String,Object> map = new HashMap<>();
        map.put("user_id",user_id);
        return questionnaireMapper.selectList(queryWrapper.allEq(map));
    }

    /**
     * 获取的所该领域类型下的所有问卷——根据领域类型
     * @param domain_type 问卷所相关的领域
     * @return List<Questionnaire> 该领域类型下的所有问卷
     */
    @Override
    public List<Questionnaire> getQuestionnairesByDomainType(String domain_type){
        QueryWrapper<Questionnaire> queryWrapper = new QueryWrapper<>();
        Map<String,Object> map = new HashMap<>();
        map.put("domain_type",domain_type);
        return questionnaireMapper.selectList(queryWrapper.allEq(map));
    }
}
